package func

import java.io.File

/**
 * tzpdo ?????
 * 这些都是随目录下内容改变,多次调用结果会改变的.
 *
 * @author tzp
 * @since 2021/1/15
 */

object FileMatches1 {
  //函数字面量???偏应用函数???只是简单的省略了???
  def filesHere0: Array[File] = (new File(".")).listFiles

  //这个是不是和编程P155页的函数是一样的呢(无参省略括号版)? 好像不是又好像是
  def filesHere0a: () => Array[File] = (new File(".")).listFiles

  val filesHere0b: () => Array[File] = (new File(".")).listFiles

  def filesHere0c: Array[File] = {
    (new File(".")).listFiles
  }

  def filesHere1(): Array[File] = (new File(".")).listFiles


  def main(args: Array[String]): Unit = {
    //filesHere0() //报错
    filesHere0(1) //数组第1个元素

    println(filesHere0.isInstanceOf[Function0[Array[File]]]) // false
    println(filesHere0a.isInstanceOf[Function0[Array[File]]]) // true
    println(filesHere0b.isInstanceOf[Function0[Array[File]]]) // true
    println(filesHere0c.isInstanceOf[Function0[Array[File]]]) // false

    //dummyFunc(filesHere0) //报错Required Function0 Found Array
    dummyFunc(filesHere0a)
    dummyFunc(filesHere0b)
    //dummyFunc(filesHere0b) //报错Required Function0 Found Array
    //dummyFunc(filesHere0c) //报错Required Function0 Found Array

    println(filesHere0.getClass) //[Ljava.io.File;
    println(filesHere0a.getClass) //func.FileMatches1$$$Lambda$6/1844169442
    println(filesHere0b.getClass) //func.FileMatches1$$$Lambda$1/824909230
    println(filesHere0c.getClass) //[Ljava.io.File;

    val x = filesHere1 _
    println(x.getClass) //func.FileMatches1$$$Lambda$7/1537358694
    println(x().mkString)
  }

  private def dummyFunc(x: () => Array[File]) = x()

  private def contentChange() = {

  }
}

